Recently, more and more electronic devices incorporate non-volatile semiconductor memory devices. Particularly, flash memory, because of its capability to retain data without power supply, is in high demand. In order to increase storage density per area of flash memory, a multi-level cell (MLC) memory has been proposed, in which a single memory cell of MLC memory can store multiple bits of data. MLC memory usually utilizes a programming method to define multiple threshold voltages in a cell to achieve the capability of storing multiple bits of data in one memory cell.
One commonly-used programming method is incremental step pulse programming (ISPP). In an ISPP method, a programming voltage applied to a memory cell is gradually increased through a plurality of increments until the programming voltage reaches a level to sufficiently program the memory cell to a desired state. After each programming voltage is applied to the memory cell, a verify voltage is applied to the memory cell to determine whether the memory cell has been brought to the desired state. Thus, in the ISPP method, repeated program-and-verify steps are performed for individual memory cells of a flash memory device. However, to improve accuracy of programming a memory cell, the increments of the program voltage should be small. This increases the time to program a memory cell.